package com.fy.fyai.service.downloaddecorator;

import com.fy.fyai.service.downloaddecorator.component.FileInfo;
import lombok.extern.slf4j.Slf4j;

/**
 * @author fwq
 * @description 抽象下载装饰器（装饰器模式核心抽象类）
 * @date 2025-11-03 20:00
 */
@Slf4j
public abstract class AbstractDownloadDecorator implements DownloadComponent {
    
    /**
     * 被装饰的下载组件
     */
    protected DownloadComponent downloadComponent;

    /**
     * 构造函数，注入被装饰的组件
     * @param downloadComponent 被装饰的下载组件
     */
    public AbstractDownloadDecorator(DownloadComponent downloadComponent) {
        this.downloadComponent = downloadComponent;
    }

    /**
     * 默认实现：先执行被装饰组件的方法，然后执行装饰器的增强逻辑
     * 子类可以重写此方法来自定义装饰逻辑
     */
    @Override
    public FileInfo downloadFile(String fileId) {
        // 先执行被装饰组件的方法，获取文件信息
        FileInfo fileInfo = null;
        if (downloadComponent != null) {
            fileInfo = downloadComponent.downloadFile(fileId);
        }
        // 执行装饰器的增强逻辑，对文件信息进行处理
        return enhanceDownload(fileId, fileInfo);
    }

    /**
     * 装饰器的增强方法，由子类实现具体的增强逻辑
     * 
     * @param fileId 文件ID
     * @param fileInfo 被装饰组件返回的文件信息
     * @return 增强后的文件信息
     */
    protected abstract FileInfo enhanceDownload(String fileId, FileInfo fileInfo);
}
